<?php
  //echo '<meta charset=utf-8>';

//$str='123屋顶嘴上岑国内设3计师看4见对方5能快速的法律思考';

/*
**  中文字符串截取

**@$str    待截取字符串
**@$start  开始截取字符串的位置
**@$len    需要截取的长度
**@$end    截取后需要在末尾加上的字符
**@$tmpsty 截取字符串存放

*/

function msubstr($str, $start, $len , $end='...') {
    $tmpstr = "";
    
    //获取字符编码
    $char=mb_detect_encoding($str);

    //对应编码所占字节
    if($char=='UTF-8'){$lim=3;}else if($char=='GBK'){$lim=2;}
        
           //判断初始位置是否是一个完整汉字的开始
            while($start){
                
                $sta=0;
                for($i=0;$i<$start;$i++){

                   //ASCII码大于127表示这是一个汉字的一部分；
                   if(ord($str[$i]) > 127) {
                      $sta++;
                   } 
                }

                //满足此条件表示这是一个完整汉字的开始
                if($sta%$lim==0){
                
                    break;
                    
                }
                $start++;
            }
        
        //截取的最后字符在字符串中的位置
        $strlen = $start + $len;
       
        //如果大于字符串总长，则等于字符串长度
        $strlen=$strlen>strlen($str)?strlen($str):$strlen;
         
        //开始位置到结束位置的循环
        for($i = $start; $i  < $strlen; $i++) {
            
            if(ord($str[$i]) > 127) {
            	
                $tmpstr.= substr($str, $i, $lim);
                $i=$i+$lim-1;
            
            } else{
                $tmpstr.= substr($str, $i, 1);
            }
        }
        return $tmpstr.$end;
    }

	//echo $m=msubstr($str,30,50);

  


?>